/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package RRHH_controlador;

import Conexion.Conexion;
import Modelo.SIS_LOG;
import RRHH_Modelo.*;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author equipo_4
 */
@WebServlet("/RRHH_USUARIOS_CONTROLLER/*")
public class RRHH_USUARIOS_CONTROLLER extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //RHH_USUARIO usuario = ((RHH_USUARIO)request.getSession().getAttribute("usr"));

    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

    }

    public void actualizarInformacion(Conexion con, HttpServletRequest request, String id) throws SQLException {

        String[] dato = request.getParameterValues("dato[]");
        for (int i = 0; i < dato.length; i++) {
            String var[] = dato[i].split(",");
            if (var.length != 2) {
                continue;
            }

            RHH_PERSONA_DATOS usr_datos = new RHH_PERSONA_DATOS(var[1], Integer.parseInt(var[0]), Integer.parseInt(id), null);
            usr_datos.setCon(con);
            usr_datos.Actualizar();
        }
    }

    public String agregarParametro(Conexion con, HttpServletRequest request, String id) throws SQLException {
        String[] dato = request.getParameterValues("dato[]");
        for (int i = 0; i < dato.length; i++) {
            String var[] = dato[i].split(",");
            RHH_PERSONA_DATOS usr_datos = new RHH_PERSONA_DATOS("", Integer.parseInt(var[0]), Integer.parseInt(id), null);
            usr_datos.setCon(con);
            if (var[1].equals("checked")) {
                usr_datos.Insertar();
            } else {
                usr_datos.Eliminar();
            }
        }
        return nuevosCampos(con, id);
    }

    public String nuevosCampos(Conexion con, String id) throws SQLException {

        RHH_PERSONA_DATOS usr_datos = new RHH_PERSONA_DATOS(con);
        usr_datos.setCon(con);
        List<RHH_PERSONA_DATOS> usuario_datos = usr_datos.TodosXPERSONA(Integer.parseInt(id), 0);
        String html = "";
        for (int j = 0; j < usuario_datos.size(); j++) {
            RHH_DATOS datos = new RHH_DATOS(con);
            datos.setCon(con);
            datos = datos.BuscarXid((int) usuario_datos.get(j).getID_DATOS());
            if (datos.getTIPO() == 0) {
                html += "<span class='negrillaenter'>" + datos.getDESCRIPCION() + "</span><input type='text' value='" + usuario_datos.get(j).getDATO() + "' data-id=" + datos.getID() + " class='chico'/>";
            } else {
                String direccion = "";
                if (usuario_datos.get(j).getDATO().equals("")) {
                    direccion = "Seleccione Archivo";
                }
                html += "<span class='negrillaenter'>" + datos.getDESCRIPCION() + "</span><input type='file'  value='" + direccion + "' data-id=" + datos.getID() + "/>";
            }
        }
        return html;
    }

    public String nuevoParametro(Conexion con, String id) throws SQLException {
        RHH_DATOS datos = new RHH_DATOS(con);
        datos.setCon(con);
        List<RHH_DATOS> listadatos = datos.TodosDatos();
        RHH_PERSONA_DATOS usr_datos = new RHH_PERSONA_DATOS(con);
        usr_datos.setCon(con);
        List<RHH_PERSONA_DATOS> usuario_datos = usr_datos.TodosXPERSONA(Integer.parseInt(id), 0);
        String html = "";
        for (int i = 0; i < listadatos.size(); i++) {
            String seleccionar = "";
            for (int j = 0; j < usuario_datos.size(); j++) {
                if (listadatos.get(i).getID() == usuario_datos.get(j).getID_DATOS()) {
                    seleccionar = "checked";
                }
            }
            html += "<input type='checkbox' value='" + listadatos.get(i).getID() + "' " + seleccionar + "> <span class='negrilla'>" + listadatos.get(i).getDESCRIPCION() + "</span><br/>";

        }
        return html;
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            RHH_USUARIO usuarioa = ((RHH_USUARIO) request.getSession().getAttribute("usr"));
            Conexion con = new Conexion(usuarioa.getUSUARIO(), usuarioa.getPASSWORD());

            String proceso = request.getParameter("proceso");
            String html = "";
            switch (proceso) {
                case "cambiarCargo":
                    cambiarCargo(con, request, response, usuarioa);
                    break;
                case "habilitaciontemp":
                    html = habilitaciontemp(con, request);
                    break;
                case "persona":
                    html = persona(con, request);
                    break;
                case "updatePersona":
                    html = updatePersona(con, request);
                    break;
                case "activar":
                    activar(con, request);
                    break;
                case "insertar":
                    html = InsertarUsuario(con, request);
                    break;
                case "reccargos":
                    html = reccargos(con, request);
                    break;
                case "jubilar":
                    html = jubilar(con, request);
                    break;
                case "buscarEmpleado":
                    html = buscarEmpleado(request, con);
                    break;
            }

            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/plain");
            response.getWriter().write(html);
        } catch (SQLException ex) {
            Logger.getLogger(RRHH_USUARIOS_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(RRHH_USUARIOS_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(RRHH_USUARIOS_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(RRHH_USUARIOS_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private String buscarEmpleado(HttpServletRequest request, Conexion con) throws SQLException {
        String text = request.getParameter("text");
        RHH_PERSONA persona = new RHH_PERSONA(con);
        RHH_USUARIO usuario = new RHH_USUARIO(con);
        String a = "SELECT RHH_PERSONA.ID FROM BROKER.RHH_USUARIO, BROKER.RHH_FECHAS_HITO, BROKER.RHH_PERSONA WHERE "
                + "(RHH_FECHAS_HITO.ID_USUARIO = RHH_USUARIO.ID) AND "
                + "(RHH_USUARIO.ID_PERSONA = RHH_PERSONA.ID) AND "
                + "RHH_FECHAS_HITO.ID IN (  SELECT MAX (RHH_FECHAS_HITO.ID) FROM BROKER.RHH_FECHAS_HITO GROUP BY RHH_FECHAS_HITO.ID_USUARIO)"
                + " AND RHH_FECHAS_HITO.ID_EVENTO_HITO=3 AND RHH_USUARIO.ESTADO=1 AND (UPPER(RHH_PERSONA.PRIMER_NOMBRE||' '||RHH_PERSONA.SEGUNDO_NOMBRE||' '||RHH_PERSONA.PRIMER_APELLIDO||' '||RHH_PERSONA.SEGUNDO_APELLIDO) LIKE UPPER('%"+text+"%')"
                + " or TO_CHAR(RHH_PERSONA.CI) LIKE ('"+text+"%')) ";
        String html = "";
        ResultSet rs = con.EjecutarConsulta(a);
        while(rs.next()){
            persona = persona.BuscarxID(rs.getInt("ID"));
            String src = "../img/imagen3.jpg";
            String nombre = persona.getPRIMER_NOMBRE() + " ";
            if (persona.getSEGUNDO_NOMBRE() != null || !persona.getSEGUNDO_NOMBRE().equals("null")) {
                nombre += persona.getSEGUNDO_NOMBRE() + " ";
            }
            nombre += persona.getPRIMER_APELLIDO();
            if (persona.getSEGUNDO_APELLIDO() != null || !persona.getSEGUNDO_APELLIDO().equals("null")) {
                nombre += " " + persona.getSEGUNDO_APELLIDO() + " ";
            }
           
            html += "<div  onclick=\"abrirpop(this,'" + persona.getID() + "','" + nombre + "')\" style=\"padding: 5px; width: 106px; background: none repeat scroll 0% 0% white; border-radius: 7px; height: 135px; margin: 5px; float:left;\">\n"
                    + "<div class=\"centrado negrilla\" class='ci'>" + persona.getCI() + "</div>\n"
                    + "<div style=\"height: 80px; width: 104px;\">\n"
                    + "<img  data-ci='" + persona.getCI()+ "' data-foto='"+persona.getFOTO()+"' class='imagen'  style=\"width: 100%; height: 100%;\" alt=\"\" src=\"" + src + "\">\n"
                    + "</div>\n"
                    + "<div class=\"centrado\">" + nombre + "</div>\n"
                    + "                   </div>";
        }
        return html;
    }

    public void cambiarCargo(Conexion con, HttpServletRequest request, HttpServletResponse response, RHH_USUARIO este) throws IOException, SQLException {
        Double idusr = Double.parseDouble(request.getParameter("idusr"));
        int idcargo = Integer.parseInt(request.getParameter("idcargo"));
        RHH_USUARIO usuario = new RHH_USUARIO(con);
        usuario.setCon(con);
        usuario = usuario.BuscarXid(idusr);
        RHH_CARGO cargo = new RHH_CARGO(con);
        cargo.setCon(con);
        cargo = cargo.BuscarXid(idcargo);

        if (idcargo != 0) {
            usuario.ModificarCargo(idcargo);
            SIS_LOG.LOG(este.getID(), 3, "REEMPLAZO EL CARGO DE EL USUARIO " + usuario.getUSUARIO() + " POR EL DE " + cargo.getDESCRIPCION(), con);
        } else //usuario.QuitarCargo();                      
        {
            response.setCharacterEncoding("UTF-8");
        }
        response.setContentType("text/plain");
        response.getWriter().write(usuario.getUSUARIO() + " --> " + cargo.getDESCRIPCION());
    }

    private void activar(Conexion con, HttpServletRequest request) throws SQLException {
        int tipo = Integer.parseInt(request.getParameter("tipo"));
        int id = Integer.parseInt(request.getParameter("id"));
        RHH_USUARIO usr = new RHH_USUARIO(con).BuscarXid(id);
        if (tipo == 0) {
            usr.Activar();
        } else {
            usr.Desactivar();
        }
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    private String persona(Conexion con, HttpServletRequest request) throws SQLException {
        String html = "{";
        int id = Integer.parseInt(request.getParameter("id"));

        RHH_PERSONA pers = new RHH_PERSONA(con).BuscarxID(id);
        html += "\"id\":\"" + pers.getID() + "\",\"ci\":\"" + pers.getCI() + "\",\"emi\":\"" + pers.getLUGAR_EMISION() + "\",\"pnom\":\"" + pers.getPRIMER_NOMBRE() + "\",\"snom\":\"" + pers.getSEGUNDO_NOMBRE() + "\",\"pap\":\"" + pers.getPRIMER_APELLIDO() + "\",\"sap\":\"" + pers.getSEGUNDO_APELLIDO() + "\",\"telefono\":\"" + pers.getTELEFONO() + "\",\"email\":\"" + pers.getEMAIL() + "\"";

        return html + "}";
    }

    private String updatePersona(Conexion con, HttpServletRequest request) throws SQLException {
        int id = Integer.parseInt(request.getParameter("id"));
        String reg = request.getParameter("reg");
        String nom1 = request.getParameter("nom1");
        String nom2 = request.getParameter("nom2");
        String ap1 = request.getParameter("ap1");
        String ap2 = request.getParameter("ap2");
        String email = request.getParameter("email");
        String telefono = request.getParameter("telf");
        int ci = Integer.parseInt(request.getParameter("ci"));

        RHH_PERSONA pers = new RHH_PERSONA(id, ci, reg, nom1, nom2, ap1, ap2, "", email, telefono, null);
        pers.setCon(con);
        pers.update();
        return "true";
    }

    private String InsertarUsuario(Conexion con, HttpServletRequest request) throws SQLException {
        con.Transacction();
        String nom1 = request.getParameter("nom1");
        String nom2 = request.getParameter("nom2");
        String ap1 = request.getParameter("ap1");
        String ap2 = request.getParameter("ap2");
        String ci = request.getParameter("ci");
        String reg = request.getParameter("reg");
        String telf = request.getParameter("telf");
        String email = request.getParameter("email");
        String usr = request.getParameter("usr");
        String pass = request.getParameter("pass");
        String cargo = request.getParameter("cargo");

        RHH_PERSONA pers = new RHH_PERSONA(0, Integer.parseInt(ci), reg, nom1, nom2, ap1, ap2, "", email, telf, null);
        pers.setCon(con);
        int idpe = pers.Insertar();
        RHH_USUARIO usrs = new RHH_USUARIO(usr, pass, Integer.parseInt(cargo), idpe, 1);
        usrs.setCon(con);
        usrs.Insertar();
        usrs.Desactivar();
        con.commit();
        String html = "";
        html += "<tr>";
        html += "<td>" + usr + "</td>";
        RHH_CARGO cargos = new RHH_CARGO(con).BuscarXid(Integer.parseInt(cargo));
        html += "<td onclick='cambiarcargo(" + Integer.parseInt(cargo) + ");'>" + cargos.getDESCRIPCION() + "</td>";
        html += "<td onclick='editarPersona(" + idpe + ",this);'>" + ci + "</td>";
        html += "<td>";
        html += "<input type='checkbox' onclick='activar(" + usrs.getID() + ",this);' name='estado' checked='checked'/>";
        html += "</td>";
        html += "</tr>";
        return html;
    }

    private String reccargos(Conexion con, HttpServletRequest request) throws SQLException {
        List<RHH_CARGO> cargos = new RHH_CARGO(con).Acefalos();
        String html = "";
        for (int i = 0; i < cargos.size(); i++) {
            html += "<option value='" + cargos.get(i).getID() + "'>" + cargos.get(i).getDESCRIPCION() + "</option>";
        }
        return html;
    }

    private String habilitaciontemp(Conexion con, HttpServletRequest request) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
        con = new Conexion("broker", "oracle123");
        con.Conectar();
        int idus = Integer.parseInt(request.getParameter("id"));
        RHH_USUARIO us = new RHH_USUARIO(con).BuscarXid(idus);
        us.Activar();
        return "true";
    }

    private String jubilar(Conexion con, HttpServletRequest request) throws SQLException {
        int id_usuario = Integer.parseInt(request.getParameter("id_usuario"));
        RHH_USUARIO usr = new RHH_USUARIO(con).BuscarXid(id_usuario);
        RHH_PERSONA per = new RHH_PERSONA(con).BuscarxID_Usuario(id_usuario);
        usr.jubilar();
        return "<tr><td>" + per.getCI() + "</td><td>" + per.getPRIMER_NOMBRE() + " " + per.getSEGUNDO_NOMBRE() + "</td><td>" + per.getPRIMER_APELLIDO() + " " + per.getSEGUNDO_APELLIDO() + "</td></tr>";
    }

}
